# Домашнее задание к занятию «Базы данных, их типы»

## Задание 1. СУБД
Кейс
Крупная строительная компания, которая также занимается проектированием и девелопментом, решила создать правильную архитектуру для работы с данными. Ниже представлены задачи, которые необходимо решить для каждой предметной области.

Какие типы СУБД, на ваш взгляд, лучше всего подойдут для решения этих задач и почему?

### 1.1.
Бюджетирование проектов с дальнейшим формированием финансовых аналитических отчётов и прогнозирования рисков. СУБД должна гарантировать целостность и чёткую структуру данных.

### Ответ. 
Для решения данной задачи лучше всего подойдет реляционная СУБД например PostgreSQL. Так как SQL гарантирует четкую структуру данных и их согласованность, поддерживает транзакции.

### 1.2.
Под каждый девелоперский проект создаётся отдельный лендинг, и все данные по лидам стекаются в CRM к маркетологам и менеджерам по продажам. Какой тип СУБД лучше использовать для лендингов и для CRM? СУБД должны быть гибкими и быстрыми.

### Ответ. NoSQL Документо ориентированные СУБД.
БД в которой данные хранятся в виде документов. Каждый документ представляет данные в виде ключ-значение, связь с другими документами и мета полями.


### 1.3. 
Отдел контроля качества решил создать базу по корпоративным нормам и правилам, обучающему материалу и так далее, сформированную согласно структуре компании. СУБД должна иметь простую и понятную структуру.

### Ответ. NoSQL  Иерархическая СУБД
Данные организованы в древовидную структуру. Данные хранятся в виде набора полей, где каждое поле содержит только одно значение.
Записи связаны друг с другом через связи в отношениях родитель потомок.
В иерархической модели базы БД каждая дочерняя запись имеет только одного родителя.
Родитель может иметь несколько детей.


### 1.4.
Департамент логистики нуждается в решении задач по быстрому формированию маршрутов доставки материалов по объектам и распределению курьеров по маршрутам с доставкой документов. СУБД должна уметь быстро работать со связями.
Приведите ответ в свободной форме.

### Ответ. NoSQL Графовые СУБД
БД, которая использует структуры графов для семантических запросов. Данные хранятся в виде узлов, ребер и свойств. Узел представляет собой объект. Ребро представляет собой отношение, которое соединяет узлы.
Свойства  - это дополнительная информация, добавляемая в узлы.


## Задание 2. Транзакции

### 2.1. Пользователь пополняет баланс счёта телефона, распишите пошагово, какие действия должны произойти для того, чтобы транзакция завершилась успешно. Ориентируйтесь на шесть действий.

### Ответ.

- Проверка наличия счета 

- Проверка прав

- Проверка доступности счета

- Проверка наличия денежных средств на счете

- Блокировка денежных средств

- Списание денежных средств
 
## Задание 3. SQL vs NoSQL

### 3.1. Напишите пять преимуществ SQL-систем по отношению к NoSQL.
Приведите ответ в свободной форме.

### Ответ.

- SQL-базах данных используется транзакционная модель, которая позволяет сохранять целостность данных и обеспечивать ACID

- SQL-базы данных могут использовать процессы резервного копирования и восстановления для обеспечения сохранности данных и минимизации потерь в случае сбоя.

- SQL имеет очень мощный язык запросов, что делает его лучшим выбором для сложных запросов.

- SQL-базы данных имеют жёстко определённый формат хранения данных, что делает их наиболее подходящим выбором для представления сложных связанных данных

- SQL-базах данных используется B-Tree индекс, который является структурой дерева, где каждый узел имеет набор ключей, отсортированных в порядке возрастания или убывания. Этот тип индекса позволяет быстро выполнять запросы SELECT, JOIN, WHERE и ORDER BY, а также обеспечивает быстрый доступ к данным при выполнении операций вставки, обновления и удаления данных




## Задание 4. Кластеры
Необходимо производить большое количество вычислений при работе с огромным количеством данных, под эту задачу выделено 1000 машин.
На основе какого критерия будете выбирать тип СУБД и какая модель распределённых вычислений здесь справится лучше всего и почему?
Приведите ответ в свободной форме.

### Ответ. 

Наиболее подходящей СУБД будет реляционная БД SQL по следующим причинам: SQL-базах данных используется транзакционная модель, которая позволяет сохранять целостность данных и обеспечивать ACID, SQL-базы данных могут использовать процессы резервного копирования и восстановления для обеспечения сохранности данных и минимизации потерь в случае сбоя, SQL имеет очень мощный язык запросов, что делает его лучшим выбором для сложных запросов, SQL-базы данных имеют жёстко определённый формат хранения данных, что делает их наиболее подходящим выбором для представления сложных связанных данных.

Распределенные системы - это группы объединенных в сеть компьютеров, которые преследуют общую цель своей работы. Термины "параллельные вычисления", "параллельные вычисления" и "распределенные вычисления" сильно пересекаются, и между ними не существует четкого различия.[18] Одну и ту же систему можно охарактеризовать как "параллельную" и "распределенную"; процессоры в типичной распределенной системе работают параллельно.[19] Параллельные вычисления можно рассматривать как особенно тесно связанную форму распределенных вычислений,[20] а распределенные вычисления можно рассматривать как слабо связанную форму параллельных вычислений.[10] Тем не менее, можно грубо классифицировать параллельные системы как "параллельные" или "распределенные", используя следующие критерии:

При параллельных вычислениях все процессоры могут иметь доступ к общей памяти для обмена информацией между процессорами.[21]
В распределенных вычислениях каждый процессор имеет свою собственную память (distributed memory). Обмен информацией осуществляется путем передачи сообщений между процессорами.[22]
Рисунок справа иллюстрирует разницу между распределенными и параллельными системами. Рисунок (а) представляет собой схематическое изображение типичной распределенной системы; система представлена в виде сетевой топологии, в которой каждый узел является компьютером, а каждая линия, соединяющая узлы, является каналом связи. На рисунке (b) та же распределенная система показана более подробно: каждый компьютер имеет свою собственную локальную память, и обмен информацией может осуществляться только путем передачи сообщений от одного узла к другому с использованием доступных каналов связи. На рисунке (с) показана параллельная система, в которой каждый процессор имеет прямой доступ к общей памяти.

Ситуация еще более осложняется традиционным использованием терминов "параллельный" и "распределенный алгоритм", которые не совсем соответствуют приведенным выше определениям параллельных и распределенных систем (более подробное обсуждение см. ниже). Тем не менее, как правило, высокопроизводительные параллельные вычисления в многопроцессоре с общей памятью используют параллельные алгоритмы, в то время как координация крупномасштабной распределенной системы использует распределенные алгоритмы.[23]
Вывод для решения данной задачи лучше всего подойдет модель распределенных вычислений.
